home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 5 / MacMania 5.toast / / Internet software / NewsWatcher / NW Source / Source / cancel.c < prev    next >
Text File  |  1997-01-09  |  3KB  |  121 lines

  1. /*----------------------------------------------------------------------------
  2.  
  3.     cancel.c
  4.  
  5.     This module handles canceling articles.
  6.     
  7.     Copyright © 1994-1997, Northwestern University.
  8.  
  9. ----------------------------------------------------------------------------*/
  10.  
  11. #include <stdio.h>
  12. #include <string.h>
  13.  
  14. #include "glob.h"
  15. #include "cancel.h"
  16. #include "dialog.h"
  17. #include "header.h"
  18. #include "strutil.h"
  19. #include "news.h"
  20. #include "status.h"
  21. #include "memutil.h"
  22. #include "ic.h"
  23.  
  24.  
  25.  
  26. /*----------------------------------------------------------------------------
  27.     CancelArticle 
  28.     
  29.     Cancel an article.
  30.     
  31.     Entry:    idStr = message id, C-format.
  32.             groups = handle to list of group names.
  33.             statusMsg = status message, C-format.
  34.     
  35.     Exit:    function result = error code.
  36. ----------------------------------------------------------------------------*/
  37.  
  38. OSErr CancelArticle (char *idStr, Handle groups, char *cancelMsg)
  39. {
  40.     Handle msg = nil;
  41.     char cancelStr[263];
  42.     Handle cancelHandle = nil;
  43.     Handle extraNews = nil;
  44.     OSErr err = noErr;
  45.     Boolean postIndeterminate;
  46.     
  47.     MyICReadSharedPrefs(kICNewsHeaders);
  48.  
  49.     sprintf(cancelStr, "cancel %s", idStr);
  50.     err = MyPtrToHand(cancelStr, &cancelHandle, strlen(cancelStr));
  51.     if (err != noErr) goto exit;
  52.     err = MyPtrToHand(gPrefs.extraNewsHdrLines, &extraNews, 
  53.         strlen(gPrefs.extraNewsHdrLines));
  54.     if (err != noErr) goto exit;
  55.     err = MakeNewsHeader(groups, cancelHandle, nil, nil, nil, nil, extraNews, 
  56.         cancelHandle, nil, &msg);
  57.     if (err != noErr) goto exit;
  58.     MyDisposeHandle(cancelHandle);
  59.     cancelHandle = nil;
  60.     MyDisposeHandle(extraNews);
  61.     extraNews = nil;
  62.     err = MyPtrAndHand(cancelStr, msg, strlen(cancelStr));
  63.     if (err != noErr) goto exit;
  64.     
  65.     /* Post the control message to cancel the article. */
  66.     
  67.     err = PostArticle(msg, cancelMsg, &postIndeterminate);
  68.     if (err != noErr) goto exit;
  69.     
  70.     MyDisposeHandle(msg);
  71.     return noErr;
  72.     
  73. exit:
  74.  
  75.     MyDisposeHandle(cancelHandle);
  76.     MyDisposeHandle(extraNews);
  77.     MyDisposeHandle(msg);
  78.     return err;
  79. }
  80.  
  81.  
  82.  
  83. /*----------------------------------------------------------------------------
  84.     UserIsPoster 
  85.     
  86.     Check to see if the user is the poster of an article.
  87.     
  88.     Entry:    text = pointer to full article text or article header text.
  89.     
  90.     Exit:    function result = true if user is poster.
  91. ----------------------------------------------------------------------------*/
  92.  
  93. Boolean UserIsPoster (Handle text)
  94. {
  95.     char fromStr[514], fromStrAlternate[514], authorStr[514];
  96.     Boolean valid = false;
  97.     
  98.     MyICReadSharedPrefs(kICRealName);
  99.     MyICReadSharedPrefs(kICEmail);
  100.     
  101.     if (*gPrefs.fullName == 0) {
  102.         strcpy(fromStr, gPrefs.emailAddress);
  103.         sprintf(fromStrAlternate, "%s ()", gPrefs.emailAddress);
  104.     } else {
  105.         sprintf(fromStr, "%s (%s)", gPrefs.emailAddress, gPrefs.fullName);
  106.     }
  107.     if (FindHeaderCString(text, "Sender", authorStr, sizeof(authorStr))) {
  108.         valid = MyStrEqual(fromStr, authorStr);
  109.         if (!valid && *gPrefs.fullName == 0)
  110.             valid = MyStrEqual(fromStrAlternate, authorStr);
  111.     }
  112.     if (!valid) {
  113.         if (FindHeaderCString(text, "From", authorStr, sizeof(authorStr))) {
  114.             valid = MyStrEqual(fromStr, authorStr);
  115.             if (!valid && *gPrefs.fullName == 0)
  116.                 valid = MyStrEqual(fromStrAlternate, authorStr);
  117.         }
  118.     }
  119.     return valid;
  120. }
  121.